// 本文件的调用关系图 https://app.yinxiang.com/shard/s8/nl/262318/6f4ef957-2bcb-4563-96e9-e0c24c0559e4


//将dom内的所有任务按其父节点号重新挂装
function __reappend_task_in_dom(dom){
	var pid;
	var j=0;
	$(dom + " div.task").each(function(){
		pid=$(this).attr('data-parent');
		$(dom + " div.task[data-taskid=" + pid + "]").append($(dom + " div.task[data-parent=" + pid + "]"));
		console.log(j++);
	}); 
	return j;
}

//取得节点后，组装成结构，生成DOM串，再挂装到几个主要节点
// var task_tree= new Array();
// var taskstr="";

//将任务列表数据生成两层的任务树数组结构
// 注意，这只是个伪树的结构，只有两层，childs里也只存了ID,就象是task表中只存parent一样
function data_to_task_tree(items){

	//清空task_tree
	var task_tree= new Array();
	var item1 = new Object;
	var item2 = new Object;
	var length=items.length;
	$.each(items,function(idx,item1){ //生成task数组
		item1.childs=new Array();
		task_tree[item1.id]=item1;
	});
//						console.log(task_tree);
	$.each(items,function(idx,item2){ //生成task_tree
//															console.log(item2);
		if(typeof task_tree[item2.parent] == 'undefined'){
			var itemT = new Object;
			itemT.id = item2.parent;
			itemT.childs = new Array();
//								console.log(itemT.id);
			task_tree[item2.parent] = itemT;
		}
		task_tree[item2.parent].childs.push(item2.id);
	});

	// console.log(task_tree);
	return task_tree;
}
		
//将任务树中指定的节点递归生成节点HTML字符串
function task_tree_to_str(task_tree,id,noroot) {
	var str = "";
		// console.log(id);
	//	console.log(task_tree[id]);
	//如果不存在id号子结点，就退出递归
	if (!task_tree[id]) {
		return "";
	}

	//noroot表示不生成根节点的html串
	if (noroot) {

	} else {
		// 1表示不生成结束的</div>
		// str = new_task(task_tree[id], 1);

		// 改用对象方式传递参数
		let op={
			nodivend:1
		}
		str = new_task(task_tree[id], op);


		// switch (task_dom_type) {
		// 	case 'urlbook':
		// 		str = (new_task_urlbook(task_tree[id], 1));
		// 		break;
		// 	default:
		// 		str = (new_task(task_tree[id], 1));
		// }

// console.log(str);
	}

	//为其每个子节点生成字符串
	var childs = task_tree[id].childs;
	$.each(childs, function (idx, child) {
		// console.log(child);
		// str += task_tree_to_str(task_tree,child, 0, task_dom_type);
		str += task_tree_to_str(task_tree,child, 0);
	});

	// str += '</div>';


	if (noroot) {
		// console.log(str);
	} else {
		str += '</div>';
	}
		// console.log(task_tree[id].title);
		// console.log(str);
	return str;
}


function data_to_task_tree_to_str(data,root_task_id){
	var items=data;
	var task_tree = data_to_task_tree(items);
	// console.log(task_tree);
	var html_str = task_tree_to_str(root_task_id,0,task_dom_type);
	return html_str;
}

//将dataGet数据,在frag中组织成html,挂装到dom中
//两步，1先生成每个任务的html节点暂存，2遍历，各个任务节点根据自己的父节点号挂装。
function task_data_append_to_dom_by_jquery(dataGet,dom) {
	parent_domid = $(dom).parent().attr("id");
	parent_dom = "#" + parent_domid;
	// console.log(dataGet);
	if (dataGet.data) {
		items = dataGet.data;
		var length = items.length;
		// 创建一个frag片段,存放所有的任务节点,不用在dom中操作
		var frag = document.createDocumentFragment();
		$.each(items, function (idx, item) { 
			//先在frag中挂装，而后一次性挂装到DOM，以提高性能
			$(frag).append(new_task(item));
		});

		// $(dom).empty();
		$(dom).append($(frag));
		$.each(items, function (idx, item) { //所有任务依据自己的parnet挂装
			$(dom + " .task[data-taskid=" + item.parent + "]").append($(dom).children(" .task[data-taskid=" + item.id + "]"));
		});
		$(dom + " div.task").hide();
		$(dom + ">div.task").show();
		expend_icon_status_dom(dom);

		// $.each(items, function (idx, item) { //所有任务依据自己的parnet挂装
		// 	$(frag).childrens(".task[data-taskid=" + item.parent + "]").append($(frag).children(" .task[data-taskid=" + item.id + "]"));
		// });

		// console.log($(frag));
		// $(dom).replaceWith($(frag));
		// $(dom).empty();

		// console.log($(frag).children("div.task"));

		

	}
}

// 将指定id的任务数据，到指定dom挂装
// function task_data_append_to_dom_by_tree(dataGet,dom,taskid,noroot=0){ 
function task_data_append_to_dom_by_tree(dataGet,op){ 

	let dom = op.dom;
	let taskid = op.taskid;
	let noroot = op.noroot;

	parent_domid = $(dom).parent().attr("id");
	parent_dom = "#" + parent_domid;
	if(dataGet.data){
		items=dataGet.data;
		var task_tree = data_to_task_tree(items);
		var htmlstr = task_tree_to_str(task_tree,taskid,noroot);
		// console.log(htmlstr);
		// console.log(dom);
		// console.log(dom);

		// 如果根节点也要替换，则用这句
		// $(dom).replaceWith(htmlstr);
		
		// 如果要移除原子节点
		// $(dom).children("div.task").remove();
		$(dom).append(htmlstr);
		$(dom + " div.task").hide();
		$(dom + ">div.task").show();
		expend_icon_status_dom(dom);
		
		
		// $(parent_dom).append(htmlstr);
		// $(parent_dom + " div.task").hide();
		// $(parent_dom + ">div.task").show();
		// expend_icon_status_dom(parent_dom);

	}
}


//从dataurl取得任务列表，并挂装到一个指定dom
// function get_data_and_append(dataurl,dom,taskid,task_dom_type,noroot=0){
function get_data_and_append(op){
	

	console.log(op);
	//dataurl取得数据的地址,后有/
	//dom:要挂装到的dom
	var loading=layer.msg('正从服务器上加载数据，请稍候！', {icon: 16});
	//查询参数加随机数，以取消缓存
	var dataurl2 = op.dataurl + Math.ceil(Math.random()*100);
	console.log(dataurl2);
	$.getJSON(dataurl2, function(dataGet){

		// 用task_tree方式挂装

		task_data_append_to_dom_by_tree(dataGet,op)

		//用jquery挂装,总带多了根元素一层，晕
		// task_data_append_to_dom_by_jquery(dataGet,dom);
		// expend_icon_status();
	});
}


//清除所有的根任务dom节点
function clear_all_task(){
	console.log("clear exist task");
	$("#902>div.task").remove();
	$("#901").empty();
	// $("#902").empty();
	$("#904").empty();
}

//将dataGet的数据,组织成dom，用jquery的方法，挂装到页面中
//两步，1先生成每个任务的html节点暂存，2遍历，各个任务节点根据自己的父节点号挂装。
function all_task_data_apend_by_jquery(dataGet) {
	//			console.log(dataGet);
	if (dataGet.data) {
		
		// console.time('生成任务DOM开始');
			items = dataGet.data;
			var length = items.length;
			// 创建一个frag片段,存放所有的任务节点,不用在dom中操作
			var frag = document.createDocumentFragment();
			$.each(items, function (idx, item) { //生成所有任务，先放到任务挂装区
				//							console.log(item);//每个约5ms左右
				//先在frag中挂装，而后一次性挂装到DOM，以提高性能
				$(frag).append(new_task(item));
			});

			$("#904").append($(frag));//
			$("#904>div.task").hide();

		// console.timeEnd('生成任务DOM结束');

		i = 0;
		$.each(items, function (idx, item) { //所有任务依据自己的parnet挂装
			i++;
			// console.log(item);//每个需15ms左右
			// console.log($(frag));
			$(".task[data-taskid=" + item.parent + "]").append($("#904 .task[data-taskid=" + item.id + "]"));
			// console.log(i + ':' + length + ':' + i / length + ':' + Math.floor(i / length * 100) + '%');
			//进度条
			// $(".progress-bar").css("width", Math.floor(i / length * 100) + '%');
		});

		// $('#btn_refresh_all i').removeClass('fa-spin');
		expend_icon_status();
		$("#901>div.task").show();
		$("#902>div.task").show();
	}
}

//将dataGet的数据,生成str，用task_tree的方法，挂装到页面中
// 将所有任务的数据，分别挂装到主要节点
function all_task_data_apend_by_tree(dataGet) { 
	if(dataGet.data){
		clear_all_task();
		console.time('生成任务DOM开始');
		items=dataGet.data;
		var task_tree = data_to_task_tree(items);

		$("#901").append(task_tree_to_str(task_tree,1,1));
		$("#902").append(task_tree_to_str(task_tree,2,1));
		$("#903").append(task_tree_to_str(task_tree,3));
		$("#905").append(task_tree_to_str(task_tree,5));
		$("#907").append(task_tree_to_str(task_tree,7));
		$("#913").append(task_tree_to_str(task_tree,13,1));

		expend_icon_status();
		$("#901 div.task").hide();
		$("#902 div.task").hide();
		$("#901>div.task").show();
		$("#902>div.task").show();
		$("#905>div.task").show();
		$("#913 div.task").hide();
		$("#913>div.task").show();

		console.timeEnd("load");
	}
}


//取得全部任务，并挂装到页面中,目前主用
function refresh_all_task_and_append(){
	console.time("load");
	var loading=layer.msg('正从服务器上加载数据，请稍候！', {icon: 16});

	var dataurl ="/index.php/task/getall/";
	//加一个随机数，用于取消缓存
	// var dataurl ="/index.php/task/getall/"+Math.ceil(Math.random()*100);

	var postdata;
	if('undefined' !== typeof teamid){
		dataurl = "/index.php/task/get_team_task/";
		postdata={
			team:teamid
		};
	}
	$.post(dataurl,postdata,all_task_data_apend_by_tree,"json");
}

//只先加载顶层任务，待打开某个任务文件夹时再从任务挂装区加载其下层子节点,同时要修改节点展开事件，目前没用
function ___refresh_all_and_append_top(){
		
		var loading=layer.msg('正从服务器上加载数据，请稍候！', {icon: 16});
		var i;
		var items;
		$.getJSON("/index.php/task/getall/"+Math.ceil(Math.random()*100), 
			function(dataGet) { 
//			console.log(dataGet);
				if(dataGet.data){
//					console.log(dataGet.data);
					console.time('生成任务DOM开始');
					items=dataGet.data;
					var length=items.length;
						var frag = document.createDocumentFragment();
						$.each(items,function(idx,item){ //生成所有任务，先放到任务挂装区
							$(frag).append(new_task(item));
						});
						$("#904").append($(frag));//
						$("#904>div.task").hide();
						
/* 						$.each(items,function(idx,item){ //想将所有任务的有子任务的节点标色，但效率太低
							console.log(item);//每个需15ms左右							
							$("div.task[data-taskid="+item.parent+"]").attr("data-haschild",1);
						});	 */
						
					//	$(".task[data-taskid=1]").append($("#904 div.task[data-parent=1]"));
						$(".task[data-taskid=2]").append($("#904 div.task[data-parent=2]"));
					//	$(".task[data-taskid=3]").append($("#904 div.task[data-parent=3]"));
					$('#btn_refresh_all i').removeClass('fa-spin');
					//expend_icon_status();
					$("#901>div.task").show();
					$("#902>div.task").show();
					layer.close(loading); 
				}
			}		
		);
		
		$('#btn_refresh_all i').addClass('fa-spin');  
}

//通过循环，检测若不存在某个节点，则挂装，目前没用	
function ___refresh_all_and_append_demand(){

		var parent;
		var element;
		var noappenditems=new Array;
		var items;
		var i=0;
		$.getJSON("/index.php/task/getall/", 
			function(get_result) { 
//			console.log(dataGet);
				if(get_result.data){
//					$("div.task[data-taskid="+id+"]"+" div").remove();
//					parentid=0;
//					console.log(dataGet.data);
					items=get_result.data;
					//console.log(items);
					while(items.length>0){
						i++;
						$.each(items,function(idx,item){ //对每一项任务
//							console.log(item);
							element = $(".task[data-taskid="+item.parent+"]"+' '+".task[data-taskid="+item.id+"]");
							parent = $(".task[data-taskid="+item.parent+"]");
							if(element.length>0){//如果已存在该任务
	//							items.splice(idx,1);
							}else{
								if(parent.length>0){//如果已存在父任务
									$(".task[data-taskid="+item.parent+"]").append(new_task(item));
									$(".task[data-taskid="+item.id+"]").css('display','none');
	//								items.splice(idx,1);
								}else{//如果没有父任务，则存到未挂装中
	//								console.log(item);
	//								console.log(idx);
									noappenditems.push(item);
								}
								
							}
							
							
						}); 
//						console.log(noappenditems);
						if(items.length==noappenditems.length||i>2){
							break;
						}
						items=noappenditems;//把未挂装的任务调出重做
						noappenditems=Array(0);
						
					}
					
					$('#btn_refresh_all i').removeClass('fa-spin');
					expend_icon_status();
				}else{
					console.log(get_result);
				}
			}		
		);
		$('#btn_refresh_all i').addClass('fa-spin');
}


$(document).ready(function() {

});